In various communications environments, the passing of data packets between communications units of an environment is performed using a specialized, dedicated communications processor. Each communications unit of the environment has such a processor, which is used to send or receive data packets over an external connection. In the case of a sending unit, the communications processor gathers the data of a packet from the host system's main memory into a temporary staging buffer. Then, when the gather is complete, the communications processor initiates the sending of the data packet over the external connection. In the case of a receiving system, after a packet has been received over an external connection into a temporary staging buffer, the communications processor scatters the packet data out to the host system's main memory.
To achieve enhanced throughput of the communications environment, the communications processor may be at various stages of processing for multiple data packets at any given time. Thus, it is possible that the data returned to the communications processor from the main memory may be in an order that differs from the order in which the requests for the data were sent to the main memory.
In some systems, however, it is important that the data sent by the communications processor over the external connection correspond to the same order in which the requests were issued by the communications processor to the main memory. Thus, previously, the communications processor had the responsibility of ensuring that the memory responses were placed in proper order and then sent over the external connection in proper order. This required that code be added to the specialized communications processor, which increased the complexity and cost of the communications processor and degraded its performance.
Based on the foregoing, a need still exists for an enhanced capability for managing out-of-order data packets. In particular, a need exists for a capability that enables the grouping of data packet requests into request groups, and the tracking of dependencies between the request groups in order to ensure proper ordering of the data packets.